﻿#ifndef ONLINEUSERS_H
#define ONLINEUSERS_H

#include <map>
#include <string>
#include <mutex>
#include "clienthandle.h"

using StdSockPtr = ClientHandle *;

class OnlineUsers
{
public:
    // 获取单例对象
    static OnlineUsers *getInstance()
    {
        // 静态局部变量，保证只初始化一次
        static OnlineUsers instance;
        return &instance;
    }

    OnlineUsers() = default; // 构造函数
    ~OnlineUsers() = default; // 析构函数

    // 添加用户
    void AddUsers(const std::string &name, StdSockPtr ptr);
    // 移除用户
    void RemoveUsers(StdSockPtr ptr);
    // 查找用户
    StdSockPtr FindUser(const std::string &name);
    // 获取在线用户链表
    QStringList GetOnlineList();

private:
    // 存储用户信息的map
    std::map<std::string, StdSockPtr> users;
    // 互斥锁
    std::mutex mutex;
};

#endif // ONLINEUSERS_H
